{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# SVM on Pima Indians Diabetes Data Set\n",
    "\n",
    "数据说明：\n",
    "Pima Indians Diabetes Data Set（皮马印第安人糖尿病数据集） 根据现有的医疗信息预测5年内皮马印第安人糖尿病发作的概率。   \n",
    "\n",
    "数据集共9个字段: \n",
    "0列为怀孕次数；\n",
    "1列为口服葡萄糖耐量试验中2小时后的血浆葡萄糖浓度；\n",
    "2列为舒张压（单位:mm Hg）\n",
    "3列为三头肌皮褶厚度（单位：mm）\n",
    "4列为餐后血清胰岛素（单位:mm）\n",
    "5列为体重指数（体重（公斤）/ 身高（米）^2）\n",
    "6列为糖尿病家系作用\n",
    "7列为年龄\n",
    "8列为分类变量（0或1）\n",
    "\n",
    "数据链接：https://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 首先 import 必要的模块\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "#竞赛的评价指标为logloss\n",
    "from sklearn.metrics import log_loss  \n",
    "\n",
    "#SVM并不能直接输出各类的概率，所以在这个例子中我们用正确率作为模型预测性能的度量\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#input data\n",
    "train = pd.read_csv(\"FE_pima-indians-diabetes.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  get labels\n",
    "y_train = train['Target']   \n",
    "X_train = train.drop([\"Target\"], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练\n",
    "由于速度较慢，这里只调整了超参数C，没调L1/L2正则函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7669270833333334\n",
      "{'C': 0.01}\n"
     ]
    }
   ],
   "source": [
    "#线性SVM\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "param_grid = {'C': Cs}\n",
    "grid = GridSearchCV(SVC(kernel='linear'), param_grid, cv=5, n_jobs = 4)\n",
    "\n",
    "grid.fit(X_train, y_train)\n",
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "大家可以对比一下用原始数据（标准化，但不做缺失值填补，即缺失值取0），效果更好。\n",
    "SVM对噪声比较敏感（或许原始数据清洗的时候已经是上帝最好的安排了:) ）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优\n",
    "\n",
    "RBF核是SVM最常用的核函数。\n",
    "RBF核SVM 的需要调整正则超参数包括C（正则系数，一般在log域（取log后的值）均匀设置候选参数）和核函数的宽度gamma\n",
    "C越小，决策边界越平滑； \n",
    "gamma越小，决策边界越平滑。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise-deprecating',\n",
       "       estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "  kernel='rbf', max_iter=-1, probability=False, random_state=None,\n",
       "  shrinking=True, tol=0.001, verbose=False),\n",
       "       fit_params=None, iid='warn', n_jobs=4,\n",
       "       param_grid={'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000], 'gamma': [0.0001, 0.001, 0.01, 0.1, 1]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring=None, verbose=0)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "gammas = [0.0001,0.001, 0.01, 0.1, 1]\n",
    "#gammas =[1e-5, 1e-6]\n",
    "param_grid = {'C': Cs, 'gamma' : gammas}\n",
    "grid = GridSearchCV(SVC(kernel='rbf'), param_grid, cv=5, n_jobs = 4)\n",
    "\n",
    "grid.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.768229166667\n",
      "{'C': 100, 'gamma': 0.001}\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEKCAYAAADjDHn2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzsnXd4XNW1t989Rb33Xqzi3uUiOwFs\nugEDAQwGTLFNSyCU5H5AEggtCUmA3GtaKKbauNFM712yZMuWe5Hkoi6ry9Koz+zvjyPJki1bbdqR\nzvs884zmzD571oykWWfvtdZvCSklGhoaGhoap0PnaAM0NDQ0NJwfzVloaGhoaPSJ5iw0NDQ0NPpE\ncxYaGhoaGn2iOQsNDQ0NjT7RnIWGhoaGRp9ozkJDQ0NDo080Z6GhoaGh0Seas9DQ0NDQ6BODow2w\nFkFBQTIuLs7RZmhoaGioiq1bt1ZKKYP7GjdsnEVcXBxZWVmONkNDQ0NDVQgh8vszTtuG0tDQ0NDo\nE81ZaGhoaGj0ieYsNDQ0NDT6ZNjELHqjra2NoqIimpubHW2KU+Hm5kZUVBRGo9HRpmhoaKiEYe0s\nioqK8Pb2Ji4uDiGEo81xCqSUVFVVUVRURHx8vKPN0dDQUAnDehuqubmZwMBAzVF0QwhBYGCgttrS\n0NAYEMPaWQCao+gF7TPR0NAYKMN6G0pDQ0Oji7ZmqCuEmnyoPQLtrTBuIfhGOdqyQVHV0MKBsnoO\nHK3HxaDjulmxNn09zVnYgS+++IK7774bs9nM8uXLeeCBB3o839LSwg033MDWrVsJDAxk3bp1dFaj\n/+Mf/2DlypXo9XpWrFjB+eeff9o5n3vuOf73f/+XgwcPUlFRQVBQkF3fq4aGw7CYob60wxnkQ82R\nbj/nQ33Jyed89WdIOBum3QDJF4DBxe5m90VDSzs5R+vJ6XAMB8rqyTlaT2VDa9eYqTF+mrNQO2az\nmd/97nd8/fXXREVFMWPGDBYuXMi4ceO6xqxcuRJ/f3/y8vJYu3Yt999/P+vWrWPv3r2sXbuWPXv2\nUFJSwjnnnENOTg7AKeecO3cuF198MWeddZaD3rHGiRyuO0xDawMJfgl4GD0cbY56kRKaahQn0Jsz\nqC0AS1u3EwT4RIJ/LIw6C/zjlJ/9YpX79mbY/g5kr4L1S8AzGCYvVhxHUJLd315ru4WDFQ3kdDiE\nzlVDUU1T1xh3o57kUC/mjQ5hdJi3cgv1Jtjb1eb2ac7CxmzevJnExERGjRoFwDXXXMPGjRt7OIuN\nGzfyyCOPAHDllVdy5513IqVk48aNXHPNNbi6uhIfH09iYiKbN28GOOWcU6dOte8b1DgtZouZGz+/\nkZqWGgAivSJJ8k8iyS+JRL9EkvyTiPOJw6jX0pgBaG1UvvR7cwY1R6C1vud49wDliz9sIoy9pJsz\niFO2lwx9fInO/wuc+QAc/Ba2vQUZL0D6CohJVZzGuEvBxdOqb9FikRRUN3KgY7Wwv+P+cKWJdosE\nwKATjAr2ZEq0H9fMiCY5VHEM0f4e6HSOiTmOGGfx6Md72FtyzKpzjovw4a+XjD/tmOLiYqKjo7se\nR0VFkZmZecoxBoMBX19fqqqqKC4uZvbs2T3OLS4uBuhzTg3nYF/1Pmpaarhx3I14u3iTW5tLXk0e\nPxf9jFmaATAIA3G+cYoD8U/sciKRXpHoxDDLQTG3w7Hing6g+8+m8p7jDe7HHUDsnJ4rA79YcPMZ\nuk16AySfr9zqj8KONYrj+PAO+Px+mHglTF0CEVNhAMkhUkrK61u6to32d9znHm2gqc3cNS46wJ3R\nod6cNz60yymMCvLCxeBcv/sR4ywchZTypGMnZiOdasypjlsslj7n1HAOMkozALhpwk0EuR+PH7Wa\nWzlcd5i82jzyavPIrcllZ+VOPj/yedcYd4M7Cb4JJPkrq5BE/0SS/ZMJdHPidHApwVTZbWVwpNs2\nUT7UFYGl/fh4oQffSOWLP/n8DicQp9z7xylbQ/Z8r96h8Kt7YO7dkJ8O2W/D9jWQ9RqETlRWG5Ou\nAnf/HqfVNbWdtH2Uc7Se2sbj22JBXq6MDvNi8cwYRod5kRzqTXKoN56u6vgaVoeVVqCvFYCtiIqK\norCwsOtxUVERERERvY6Jioqivb2duro6AgICTntuX3NqOAeZpZkk+iX2cBQALnoXRgeMZnTA6B7H\nTW0mxYHUHHciPxb9yAd5H3SN8XP161p9dL/3dvG2y3uipaH3lUHnfZup53jPYMUZRE6HCVf0XBn4\nRoEzbsEJAXFzldsFT8Lud5XVxuf/g+Wrv1AUdg4/ey/ga1MiB8pNlNYdr1vydjWQHObNhRPCGR3q\nRXJHXCHQy/ZxBVsyYpyFo5gxYwa5ubkcPnyYyMhI1q5dyzvvvNNjzMKFC3nzzTdJTU3l3XffZf78\n+QghWLhwIddeey333XcfJSUl5ObmMnPmTKSUfc6p4XhazC1kl2dzVfJV/T7H0+jJ5ODJTA6e3ON4\nVVNVj1VIbm0uG/M20tje2DUmzDOsaysryS+JJP8k4n3jcdVb6UuqvgzevAQqc3oed/E6HicYdVZP\nZ+AXA65e1nl9O9JutnCkqrHbamEqOfWJeLTu4Srd91xe9D3XiU+ZpwtnW+DFVE27kpjYUSSHeRPh\n6+a8K78hoDkLG2MwGHjuuec4//zzMZvNLF26lPHjx/Pwww+TkpLCwoULWbZsGUuWLCExMZGAgADW\nrl0LwPjx41m0aBHjxo3DYDDw/PPPo9frAXqdE2DFihX861//oqysjEmTJrFgwQJeffVVh73/kcz2\n8u20mFuYHT6778F9EOgeSKB7ILPCZ3Udk1JSairtch6djmRT6SbaO7Z6dEJHjHfM8aB6hyOJ9o5G\nr9MPzIjstxVHMe/PEJjQsV0UBx4B9t0qsiJSSkrqmnukpR4oqyevooHWdmW7VwiIC/RkdKg3yZPP\nJSj0N1QEGfA8+g0RO1YTceQVqHwNqs5Ttqm8z1PiIMMM0du+uBpJSUmRJzY/2rdvH2PHjnWQRc6N\n9tnYnhXbVvDa7tf45Zpf8HKx39V1m6WNwmOF5NTm9NjOKqwvRKL8v7vqXRnlO+p4PKRjOyvUI7T3\nq2Ip4dlp4B0BN39qt/diKw6U1fOXD3exv7Se+pbjMZRwX7euIHNyqDdjwrxJDPHCzXgax1p1sCO2\n8Q40HAWvMJhyLUy9XnGqVqTN3EaJqYTi+mKKGooobiimqL6IYI9gHpj5QN8T9IIQYquUMqWvccPP\n/WloOAmZpZlMCJpgV0cBYNQZGeU3ilF+oyDu+PGm9iYO1R0itya3y4lklGTw0cGPusZ4G727Vh+d\nmVnJ/sn4lu2B6kNwxv/Y9b3Yiqe/OsD+snoumxpJcpjiFJJDvPH1GET8JDABznlEWXHlfq3ENtL+\nF355BuJ+raw2xl4CRvc+p7JICxWNFRQ3FCuOoKGIovqirsdHTUe7HD6AQWcg0ivSLn9jNnUWQogL\ngP8D9MCrUsonT3j+P8C8joceQIiU0q/juRjgVSAakMACKeURW9qr4Tw079+P6ZdfcElIwDUpGWNE\nOELnXKmEp6O+tZ7dVbtZPnG5o03pwt3gzvjA8YwP7JnsUddS17X66Lz//Mjn1Occr2kIFi4khoeT\n2HyY0D1vEuAWcNJNLbUiFfUtfLe/nGW/iufBBVZcXeuNMGaBcjtW0lHw9za8fwu4+cLERTDtBuoC\nYru+/DtXCEUNRRTXF1PSUEKrpbXHtCEeIUR5RTEjdAaR3pFEeUUR6RVJlHcUwe7BA99OHCQ2cxZC\nCD3wPHAuUARsEUJ8JKXc2zlGSnlvt/F3Ad0ryt4C/ial/FoI4QWcnC+qMWw5+s9/0rgpo+uxzsMD\n16QkXJOTcE1K7rhPwhAY6EArT01WWRYWabFKvMLW+Lr6Mj10OtNDp3cdk1JS3liuOI/K3eSmPUWe\nTxAb8j6k2dy7YrGPi0+X4wh0D1Tu3ZT7APeejsXHxcdhQeAPsotot0iuSonue/AgaDG3UCybKR41\ni+LgSIpKMiku3UZxyScUHf2cen3Pix5vF2+ivKJI8k/irOizuhxBpFckEV4R1ktQGCK2XFnMBPKk\nlIcAhBBrgUuBvacYvxj4a8fYcYBBSvk1gJSywYZ2ajgZlqYmmrZuw++aq/FdeCktubnKLSeH+q+/\noXbDu11j9YGBihPpcCRuSUm4JCah97Ju1e1AySjNwE3vdlJWk1oQQhDqGUqoZyhzy49AeTlc9BYy\nZjamNhPVzdVUNVdR3dRx31ytHGtSfj5Ye5AtzVuobantdX6DztDTmZzgZDodTOfzLnrraDZJKVm3\npZDpsf4khgxu68ZsMVPeWN4jZtB9pVDe1LOw0EXnQqR3JJHByUxqbiSqPIeomiIipYHIpAvwmb5U\nqRh38iQBWzqLSKCw2+MiYFZvA4UQsUA88F3HoWSgVgjxfsfxb4AHpJTm3s7XGF40Zm1FtrbiffbZ\neEybise04wtOKSXmqipacnJoyc2lucOR1L73HrLxeBqpMTKymxNRViIu8fHoXOwjFJdZmsm00GlW\n+5JzKNtXQ0ACxMxGCIGXixdeLl7E+MT0eWqbpY26ljqqmqqOO5Wm6uPOpuPx4brDVDVX0WJu6XUe\nb6P3SauTE51Lp2PxcfU5ZeX7toJaDlaY+OcVo05ps5SS2pbak2MG9YpDKDGVdGWbAQgUxxrlFUVq\nRGrXVlHn6iDIPainPVJCSbYS29j1LuzcAIGJSmxj8mLwCunzc3UEtnQWvbnJU6VeXQO8280ZGIBf\no2xLFQDrgJuAlT1eQIhbgVsBYmL6/sPVUAem9HSE0YhHyskJGkIIDEFBGIKC8Jwzp+u4tFhoKymh\nJSe3y5G05ObSkJYGbR1VtAYDLnGxXU7ELTkZ16QkjFFRCL319n0rGis4WHeQhYkLrTanw6g+BPlp\nMP+hQV35GnVGgtyDTipK7A0pJU3tTT0dywkrlurmavKP5ZNdnk1Nc02PYG8nBmHA382/xwql8+fv\ndjfh4ddOfGQUOTXNlDaUnhRELm4oxnRCYaGfqx9RXlGMDRzLObHndG0VRXlFEe4ZPrB4jRAQOU25\nnf832LtRcRxfPwzfPqao3067ERLPBjvFI/qDLZ1FEUpwupMooBeNYEBxFr874dzsbltYHwKzOcFZ\nSClfBl4GJXXWOmZbH1tIlC9dupRPPvmEkJAQdu/ebe+3ZFNMaWm4T5+Ozr3v7JFOhE6HS1QULlFR\neM+f13VctrbSmp+vrEJycmjJzaN5z17qv/hSucIDhJsbromJPVciSUkYQoIHta+eWabodHWviVAt\n298BoVOueG2MEAIPowceRg+iffqOJ5gtZmpaao47lV5WLNXN1RTUF1DdXE1Tu6Leqg+HZV+/1mMu\nN71b10ogJTSlR9wgyjsKT6ONtjVdPJU02ynXQkUOZL+lyIvs/0RRzJ1yHUy9TqlncTC2dBZbgCQh\nRDxQjOIQrj1xkBBiNOAPbDrhXH8hRLCUsgKYD2SdeK4asIVEuV6v56abbuLOO+/khhtucOC7sz5t\n5eW05OQQ/If7rDKfcHHpcgI+CxZ0Hbc0NtJy8GCPlYjpl1+o++C4rIbO1xe3rqB6hxNJTETv63va\n18wszcTHxYcx/mOs8h4chsWsfHGNmqfoNzkZep2+36sWgFWbc3no4wyevCqeUP92mtubCfcKJ9Ir\n0jn0toKT4bwnYP7DkPOFstr46d/w07+UyvhpN8CYi/tW0rURNnMWUsp2IcSdwJcoqbOvSSn3CCEe\nA7KklJ3J3YuBtbJbdaCU0iyE+CPwrVB+g1uBV2xlqy2xhUR5amoqZ5xxBkeOHHHAO7ItjZuUa4bu\nW0y2QOfhgfvEibhPnNjjeHtNTbeAunJf9/EnWOqPp5EaQkO7Vh9dGVoJCejc3JBSklGawcywmXZL\nabQZh3+EY0Vw7qOOtsQqbNxWQbxfNIsmznW8YzgdBhelg9+4hYrw4vZ3YNvb8O5SRcBw0jWK4wgd\n1/dc1jTLlpNLKT8DPjvh2MMnPH7kFOd+DUyymjGfPwBlu6w2HaBo6F/45GmH2EqifLjSkJaG3t8f\nNwdVlxv8/THMnInnzJldx6SUtJeV9XAizbk5NGZmIls7cuJ1OlyiozGPiuLXrcXMnJNKS+whXGJi\nEAaV1r5mr1bqA8Zc7GhLhszBiga2HKnhgQvHOLejOBHfKDjz/8Gv/wiHf1BWG1krIfNFiExRnMaE\n34Cr7UUkVfpXrB5sIVE+XJFSYkrfhGdqqlMV4AkhMIaHYwwPx+uMM7qOS7OZ1oKCrhVIS24uFbu3\nckWJRJe2gUP/3oAwGnFJSMBr3lkELFmCISDAge9kADTVKvvmU64Do5ujrRkyG7KK0OsEv5nmfNtp\n/UKng4T5ys1UBTvXKY7j49/DFw/ClMWw4Cmbpt+OHGfRxwrAVthKonw40pKTg7myEs+5cx1tSr8Q\nej2u8fG4xsfD+ecB8MwP97G3ZAcfTHmW1g4H0rRnD1X/fYnq19/Ab9FVBC5dijEszMHW98Ge95W2\no1Ovc7QlQ6bdbOG9bUXMGx1CiLf6HR+egZD6W5h9BxRlKUFxS7vN6zRGjrNwELaQKB+umNLSAfCc\na9t4ha2wSAtbyrZwRswZuI8bh3u3uFTLwYNUvfIqNavfoWbNWnwvXUjQ8uW4dGS9OR3ZqyF4LERM\nc7QlQ+aHAxVU1LewKCXK0aZYFyEgeoZyswPOs9YfpnSXKB87diyLFi3qkij/6CMlxr9s2TKqqqpI\nTEzkmWee4cknlVVQd4nyCy64oIdE+eLFi0lNTeXAgQNERUWxcuXKU9qgFkxpabgkJDj/VfcpOFB9\ngNqW2l4lPlwTEoh48h8kfPkl/lddxbGPPubggosovu8+mvfvd4C1p6HiABRnKauKYbDtuS6rkCAv\nV+aNcc5iN7WgSZSPUJzts7G0tJAzcxZ+ixYR9uc/OdqcQfH67td5ZuszfHvVt4R4nP6Lqb2iguq3\n3qLmnTVYTCa8zjyTwNtu61Gt7jC+egg2PQ9/2O+01cT9pby+mdR/fMfyX8fz4IXO8/fuTPRXolxb\nWWg4BU1btyJbWlS7BQVKfcUo31F9OgoAQ3AwIX/4A4nff0fwPXfTtGMH+ddeS/6SG2j4Ja3X5Aa7\nYG5XgqfJ56veUQB8sK0Ys0Vy1XTbiAaOJDRnoeEUmNLTwWjEc4Z99l+tTZu5jW3l2wZcta338SHo\n9ttJ/O5bQv/0IK0FBRQuX86RK6/i2FdfIS12FlvO+0Zp4DNF/YFtKSXrsgpJGYJooMZxNGeh4RQ0\npKXjMWUKOk/HqsUOlh0VO2hqbxq0xIfOw4OAG24g4euvCH/iccwN9RT//m4OXXwJtR9+iOzUt7I1\n21eBR5CyslA52wpqOFRhYpGNpMhHGpqz0HA47ZWVtOzbp5qU2d7ILMtEJ3TMCBvaykjn4oLflVeS\n8NlnRD7zNMJopPSBBzl4/gVUr16Npbn3XhJWwVQFB76ASVcrjXxUzrothXi46LloUrijTRkWaM5C\nw+GYOpocqTlekVGSwfjA8fi4+FhlPqHX47NgAfEffkDUf1/EEBLC0cefIO/sc6h85RXMDTZo8bJr\nPVjahkVthamlnU92lnLxpHA8XbUKAWugOQsNh2NKS0Pv64vbOPtq3VgLU5uJ3ZW7baIyK4TA+6yz\niF3zDjFvvYnbmDFUPP0MefPPpvz//o/2mhrrvVj2agifAqHj+x7r5Hy6s5TGVjNXz9C2oKyF5izs\nwBdffMHo0aNJTEzsqqHoTktLC1dffTWJiYnMmjWrSyCwqqqKefPm4eXlxZ133mlnq+2DIvGRjkdq\nqlV7StiTrUe30i7bbSpJLoTAc+ZMYla+StyGDXjOmkXVi/8lb/7ZHP3HP2grKxvaC5TugKO7YOr1\n1jHYwazPKmRUsCfTYvwdbcqwQXMWNqZTovzzzz9n7969rFmzhr17e3aW7S5Rfu+993L//fcD4Obm\nxuOPP85TTz3lCNPtQmteHu3l5eregirNwEXnwpTgKXZ5PfeJE4h6dgWjPv0En/PPp3rVavLOPY/S\nhx6iNT9/cJNmrwa9C0y4wrrGOoC88gay8mu4OiV6WGup2RvNWdiY7hLlLi4uXRLl3dm4cSM33ngj\noEiUf/vtt0gp8fT05Fe/+hVubsNAz+YUmNIViQ8vG0uS25LM0kymhkzFzWDf39OJVeF1Gz/i4IUL\nKL7vDzQfOND/idpblHjF6AXgoRKhw9OwYWshep3gcrWKBjopIyby88/N/2R/tXVlFcYEjOH+mfef\ndsxQJMqDgvrX1EXNNKSl4RIXhzFSnf/YVU1V5NTk8Pupv3eYDS5RkYQ9/BBBd9zeVRV+7LPP8Drr\nLAJvuxWPqX1Uhed8AU01w2ILqs1s4b2txcwfM0xEA50IbWVhY4YiUT7csbS20rglS9Ups5vLNgP0\nqgdlb7qqwr/7luC7f0/T9u3kL76W/BtuPH1VePZq8A5X5K9Vzvf7y6lsaOFqrbbC6oyYlUVfKwBb\nMRSJ8uFO07ZsZFOTquMVmaWZeBu9GRfoPJlcel9fgu64g4Abb6R2wwaqXnudwuXLcRs/nsDbbsX7\nnHOO9wupL4O8r2Hu3aD2zn7A+qwigr1dOWt0sKNNGXZoKwsb012ivLW1lbVr17Jw4cIeYzolyoEe\nEuXDHVNaGhgMeKhYdj2jNIOUsBSnbKGq8/Ag4MYbSfj6K8IefwxzfUdV+CULj1eF71gL0gJT1L8F\nVX6sme8PlHPFtCgMeu2rzdqMmJWFo+guUW42m1m6dGmXRHlKSgoLFy5k2bJlLFmyhMTERAICAli7\ndm3X+XFxcRw7dozW1lY+/PBDvvrqqx79u9WMKT0d98mT0XupU7enqL6I4oZiloxb4mhTTovOxQX/\nq67C7/LLOfbll1S99DKlDzxI5YpnCUiqwm/qDHRBiY42c8i8n90hGjjc+lY4CZqzsAMLFixgwYIF\nPY499thjXT+7ubmxYcOGXs/trLkYbrTX1NC8dy9Bd6m3fiSzVElUcIZ4RX8QBgO+F12Ez4IFNPzw\nA1XPPsPRH0uo3F5LoOFV/K65RrWOW0rJ+i2FzIjzJyFYne/B2dHWahoOoXHTJpBS1SmzGaUZBLsH\nM8p3lKNNGRBCCLznzSP2pnhizq3HbdwEyp96mrz5Z1OxYoV1q8LtxNb8Gg5VmrhKC2zbDM1ZaDiE\nhrQ0dD4+uE2Y4GhTBoVFWthctplZ4bPUGV9qbUTs+QDPeRcR8/obXVXhlS+82FEV/iRtR4862sp+\ns25LIZ4uei6aqIkG2grNWWjYHUXiYxOes2cjDOrcCc2tyaW6udqmEh82Zf8n0HKsSzSwqyr8k4/x\nOe88qletIu+cc4dWFW4nGlra+XRXKRdPitBEA22I5iw07E7r4cO0l5biqeItKLXFK04iexX4xUDs\nr3ocdk1MJOKfT3ZUhV85+KpwO/LpzhIaW80s0kQDbYrmLDTsjumXNAA8f6XeYrzMskxifWIJ8wxz\ntCkDp7YADv+kdMPT9f4VoFSFP0zit98QuPRmGn74gcOXXkbh7XfQVlpqZ4NPz/qsIhKCPZkW4+do\nU4Y1NnUWQogLhBAHhBB5QogHenn+P0KI7R23HCFE7QnP+wghioUQz9nSTg37YkpPxxgTg0uUOlMc\n2yxtZJVlqXdVsX0NIGHy4j6HGoKDCfnjH0n8/juCfn8XjVu2kH/d9bQWFNjezn6QV17P1vwarp6h\niQbaGps5CyGEHngeuBAYBywWQvQoEJBS3iulnCKlnAI8C7x/wjSPAz/aykZ70ZdE+U8//cS0adMw\nGAy8++67DrDQfsjWVkybN6u6ant35W4a2xvVGa+wWGD7aog/A/xj+32a3teX4N/+lpi33sTS2Ej+\nddfTkpdnQ0P7x/qsIgw6weVT1XnhoSZsubKYCeRJKQ9JKVuBtcClpxm/GFjT+UAIMR0IBb6yoY02\npz8S5TExMbzxxhtce+21DrLSfjTt2IFsbFR1vCKjNAOBYGaYCivPC9KhNl/ZghoE7uPHE/v2WwDk\nL7mBpj17rGndgGgzW3h/WxHzx4QQ7O3qMDtGCrZ0FpFAYbfHRR3HTkIIEQvEA991PNYBTwP/Y0P7\n7EJ/JMrj4uKYNGkSulPsHw8nGtLSQK/Hc5YKr8o7yCzNZEzAGHxdfR1tysDJXg0u3jB2Yd9jT4Fr\nUhKxq95GuLtRcNPNNGZnW9HA/vPd/nIqG1q1bnh2wpZ5Zr1tIJ5C9pJrgHellOaOx78FPpNSFp5u\nH1IIcStwKyhX56ej7O9/p2WfdSXKXceOIexPfzrtmP5IlI8kTOmbcJ84Eb2PdXpV25vGtkZ2VOxg\nyVjnlvjolZZ62PshTLwSXDyGNJVLbCxxq1ZRcPNSCpYtJ/qF5/Gcbd8YzoasQkK8XTkzWRMNtAe2\nvJQtArq7/Cig5BRjr6HbFhSQCtwphDgCPAXcIIQ4abNfSvmylDJFSpkSHOycfzAjVX68N8y1tTTv\n2qVqSfLs8mzaLe3qDG7v+RDaGq0mGmiMiCB21du4REZSeOtt1P/wg1Xm7Q+KaGAFV0zXRAPthS1X\nFluAJCFEPFCM4hBO2pQXQowG/IFNnceklNd1e/4mIEVKeVI21UDoawVgK/ojUT5SMGVkgpSqdhYZ\npRkYdUamhvbRUMgZ2b4aApMg2nqxFkNwMDFvvUnhLbdSdOddRD71b3wuuMBq85+K97Z1iAZO1wLb\n9sJmLllK2Q7cCXwJ7APWSyn3CCEeE0J03zBdDKyVp+zMom76I1E+UjClpaHz8sJ90kRHmzJoMksz\nmRw8GXeDu6NNGRhVB6FgE0y5Fqy8sjX4+xPz+mu4T55M8X1/oPaDD606/4lIKdmQVcjMuABGaaKB\ndsOm6zcp5WdSymQpZYKU8m8dxx6WUn7Ubcwjp1s1SCnfkFKqVpq0u0T52LFjWbRoUZdE+UcfKR/D\nli1biIqKYsOGDdx2222MHz/ewVZbHyklprQ0PGbPUq3ER21zLfur96szZXb7ahC6ftVWDAa9tzcx\nr7yM5+zZlD74INXvvGOT1wHI6hIN1FYV9kSd/7Uqoy+J8hkzZlBUVGRvs+xKW34+bSUlBCxf5mhT\nBs3mss1IpPriFRazUoiXcDZnF4tSAAAgAElEQVT42E5oT+fhQdSLL1B8730cfexxZGMjgcuXW/11\nukQDJ2migfZEiwxp2IWGNEXiw0vF8YrM0kw8jZ6MD1LZyu/Q91Bf0iUaaEt0rq5E/d//4nPRRZQ/\n9TQVK1acuvf3IGhoaefTnaVcMjkCDxftWteeaJ+2hl0wpW/CGBmJsY8UZ2cmozSDlNAUjDqjo00Z\nGNmrwd0fRi/oe6wVEEYjEf/6J8LdjcoXXsRiaiTkgfutkgX4yY4Smto00UBHoDkLDZsj29pozMjA\n56KLVJs2XNpQSkF9AdeMucbRpgyMphrY/ylMvxEM9qtyFno94Y89hs7dg+o338TS1ETYXx9G6IfW\nq3xdViGJIV5MjdZEA+2N5iw0bE7Trl1YTCbVS3wA6gtu734PzC2DlvcYCkKnI/RPD6Lz9KDqvy9h\naWoi4h9/H3SCQ+7RerILavnzgrGqvehQM5qz0LA5pl/SQKfDc7bKvmi7kVmWSYBbAEl+SY42ZWBk\nr4bQCRA+2SEvL4Qg5J570Hl4UvHMM1iaGol85hl0Li4Dnmt9VqEiGjitV9UgDRujBbg1bI4pPR23\niRPQ+6lz60BKSWZpJrPCVNZCtXwflGxTVhUOtjvo1lsI/fOfafjmW4p++zssTU0DOl8RDSzm7LEh\nBHlpooGOQHMWdmDp0qWEhIQwQaX9poeC+dgxmnbuVPUW1MHag1Q2VTI7QmUps9mrQGeASYscbQkA\nAUuuJ/xvT2BKT6fwllsxNzT0+9xv95VTZdJEAx2J5izswE033cQXX3zhaDMcgikjAywWdafMlinC\nj6qKV5jbYOc6SL4APIMcbU0XfldcQeRT/6Zx+3YKbl6Kuba275M4Lhp4RpJzasCNBDRnYQfOOOMM\nAgICHG2GQzClp6Pz8MB9smP2zK1BRmkGUV5RRHqpaK8892swVTgksN0XPgsWELViBS0HDpB/w420\nV1aedvzRY818f6CcKzXRQIcyYgLcP6/PobKw/8ve/hAU7cWvFyVbdc7hhiktHY9ZsxBGldUmdNBu\naSerLIvz4853tCkDY/tq8AyGpHMdbUmveM+fR/R/X6Twd3eSf/0SYl5/DWN47xXZ720rwiLhqhRt\nC8qRaG5aw2a0FhTQVlio6njF3qq9NLQ1qEvio6ECcr6ASVeD3nmdtOecOcSsfJX2yspT9vVWRAOL\nmBkfQHyQpwOs1OhkxKwstBWA/TGlpwOoWpI8s1SJV8wMV1EL1V3rwdIOU63Tt8KWeEybRswbb1C4\nfHnXCsM1IaHr+S1HajhcaeJ38xIdaKUGaCsLDRtiSkvHEB6OS3yco00ZNBmlGYz2H02Am0piTlIq\ntRUR0yBkrKOt6RfuE5S+3lJayL9+Cc3detSv21KIl6uBBRPDHGihBmjOwi4sXryY1NRUDhw4QFRU\nFCtXrnS0STZHtrdjysjAc+4cddUmdKO5vZnt5dvVlQVVuh3K99hFNNCauCYlEbdqFcLdjfwbb6Ix\nO5v65jY+21XKJZPDNdFAJ0D7DdiBNWvW9D1omNG0axeW+npVp8xml2fTamlVl7PIXg16V5hwhaMt\nGTCdfb3zb76ZgmXLyf39X2lq07NIC2w7BdrKQsMmmNLTQQg8ZqsoMHwCmaWZGISBlNAUR5vSP9qa\nYdcGGHuxojKrQowREcS+/TYukRHE/vsvXNp8mCmaaKBToDkLDZtgSkvHbfx4DP7q/NICxVlMCp6E\nh9HD0ab0j5zPobnWKWsrBoIxJIS2p1/gsHcot379EvVffuVokzQYAc5imLb2HhK2/kzMDQ007dih\n6pTZupY69lTtUd8WlE8kjDrL0ZYMmQ059Tz069txnTCB4vvus3lfb42+GdbOws3NjaqqKs1hdENK\nSVVVFW5ubjZ7jcbMTDCbVZ0ym1WWhUSqx1kcK4GD3yo9tnVD6xnhaFrbLXyQXcycSXGMen0lnrNn\n2byvt0bfDOsAd1RUFEVFRVRUVDjaFKfCzc2NqCjbNbs3paUj3N1xnzrFZq9hazJKM3A3uDMpaJKj\nTekfO9aCtMCUax1tyZD5bv/RLtFApa/3i8f7ejc1EbhMvX3c1cywdhZGo5H4+HhHmzHiMKWl4TFz\nxqB6FjgLmWWZTAudhtGJK6C7kFKR94iZA4EJfY93ctZnFRHq48qvkxQBxM6+3iX3P0D5v5/CYmok\n6K47VZuSrVaG9TaUhv1pLSqmNT9f1SmzR01HOVx3mNTwVEeb0j8KN0NV3rBYVZTVNfNDL6KBwmgk\n4t//wveK31D5wguUP/lPbXvZzgzrlYWG/TGlpwGoOritOkny7avA6AHjL3O0JUOmSzRw+sm1FUKv\nJ/zxx9F5eB7v6/3IXxE67ZrXHmjOQsOqmNLSMYSG4pKg3u2QzNJM/F39SfZXgZ5Yqwl2fwDjLgNX\nb0dbMyQU0cBCZsUHEHcK0cCuvt4eHlS99BKW5iYi/j74vt4a/cemLlkIcYEQ4oAQIk8I8UAvz/9H\nCLG945YjhKjtOD5FCLFJCLFHCLFTCHG1Le3UsA7SbFYkPuaoV+JDSklGaQYzwmagEyq4Yt33MbTW\nq07eozc2H67mSFVjnxXbQghC7r2H4Hvv5dhHH1N8771YWlvtZOXIxWbuWAihB54HzgWKgC1CiI+k\nlF0qYVLKe7uNvwuY2vGwEbhBSpkrhIgAtgohvpRS9q+tloZDaN6zB0tdnapTZo8cO0J5Y7l6tqCy\nV4F/HMSq9zPvZF1Wp2hg730tTiTotlvRubtz9O9/p+i3vyPq2RXo3N1tbOXIxZaXTjOBPCnlISll\nK7AWuPQ04xcDawCklDlSytyOn0uAckDrp+jkdEmSp6pb4gNQR/+KmiNw5GelYlulK7lOjnWJBkbg\n7tL/OpGAG5Yofb3T0gbc11tjYPTLWQghJgxi7kigsNvjoo5jvc0fC8QD3/Xy3EzABTg4CBs07Ijp\nlzRcx43FEBjoaFMGTWZpJhGeEUR7q0C8bvsaQCiFeCrnkx2lNLdZuHrGwD93vyuuIKKzr/fSZf3u\n660xMPq7svivEGKzEOK3Qoj+qnr1dqlzqly3a4B3pZTmHhMIEQ68DdwspbSc9AJC3CqEyBJCZGmF\nd47F3GCicccOvFScBWW2mMksy2RW+Cznj7lYLLD9HRh1JvipwLH1wbqsQpJDvZgc5Tuo830vuoio\nFf9Hy7595N94U599vTUGTr+chZTyV8B1QDSQJYR4RwjRV3Pfoo7xnUQBJacYew0dW1CdCCF8gE+B\nv0gpM05h18tSyhQpZUpwsLZL5Ugat2yGtjZVxyv2V++nvrVeHfGK/F+grgCmOH83vL44UFbPjsJa\nFqVED8lJe8+fT/RL/6W1oID865fQVlZmRSs1+h2z6Igh/AW4HzgTWCGE2C+E+M0pTtkCJAkh4oUQ\nLigO4aMTBwkhRgP+wKZux1yAD4C3pJQb+mujhuMwpaUj3NxwnzbN0aYMmoxS5ZpEFc4iezW4+ipy\n5CpnfVYhRr3g8qm97lIPCM85c4h59ZXT9vXWGBz9jVlMEkL8B9gHzAcukVKO7fj5P72dI6VsB+4E\nvuw4b72Uco8Q4jEhxMJuQxcDa2XPcsxFwBnATd1Sa9UrNDQCMKWn45GSgs7V1dGmDJrM0kwS/RIJ\ncg9ytCmnp/kY7N0IE34DRnVn/3SKBp4zNpRAL+v87XhMn07MG29gaWgg//oltBzUwp3WoL8ri+eA\nbcBkKeXvpJTboCtT6S+nOklK+ZmUMllKmSCl/FvHsYellB91G/OIlPKBE85bJaU0SimndLttH+ib\n07APbaWltB46pOotqBZzC9nl2erIgtrzAbQ3wVT1b0F9u+8o1aZWFg0isH063CeMJ6Z7X+99+6w6\n/0ikT2fRUS9RKKV8W0rZdOLzUsq3bWKZhmroSplVcXB7R/kOms3N6tiC2r4agkZD5HRHWzJk1mcV\nEubjxhlJ1o85uiUnE/f22wg3pa9303btenMo9OksOjKUAjviCBoaJ2FKS0MfHIRrcpKjTRk0GaUZ\n6IXe+VuoVuZCYaZSse3sGVt9UFbXzI85FVw5PQq9zjbvxSUujrhVb6P39yN/6TJMGZk2eZ2RQH+3\nofKBNCHEQ0KI+zpvtjRMQx1IiwVT+ia8VCzxAYp44Pig8Xi5eDnalNOzfTUIPUxSvwJOl2hgiu16\nqwAYIyO7+noX3nYbDT/+aNPXG67011mUAJ90jPfudtMY4TTv3Ye5tlbV8YqG1gb2VO5hVpiTb0FZ\nzEqTo8RzwDvM0dYMCYtFsj6rkNmjAogN7F000JoYQ0KIeestXBMSKLzzLo5pfb0HTL+0oaSUj9ra\nEA11clziQyW9H3oh62gWZmkmNcLJ38PB76C+FC78p6MtGTKZh6vJr2rk7rPtt3Vp8Pcn5s03KLzt\ndkV88O9/w+8y9cu624t+OQshRDDw/4DxQFfzZinlfBvZpaESTGlpuI4ejUHFRZEZpRm46d2YHDzZ\n0aacnuxV4B4AyRc62pIhsyGrEG9XAxdO6J9ooLXQe3sT8+orFN15J6UP/glhNOJ70UV2tUGt9Hcb\najWwH0W/6VHgCErRncYIxtLYSOO2bareggKlvmJqyFRc9E6cw9FYDQc+g0mLwODEdvaDY81tfLa7\nlEumDEw00FroPDyIeuEFPKZPp+T+B2j4+We726BG+ussAqWUK4E2KeWPUsqlgAoS0jVsSWNWliLx\noeKU2cqmSvJq85w/ZXbXu2BuVRRmVc7HO0oU0cA++lbYEp2bG1EvvoBrchJFd/2exm3ZDrNFLfTX\nWbR13JcKIS4SQkxF0XrSGMGY0tIQLi54pKg33181kuTbV0PYRAif5GhLhsz6LYWMCfNm0iBFA62F\n3tubmFdewRgaSuHtt9N8IMeh9jg7/XUWTwghfIE/AH8EXgXuPf0pGsMdReJjOjo3t74HOymZpZn4\nuPgwJmCMo005NUf3QOn2YSEauL/sGDuK6rhqiKKB1sIQGEj0ypXo3N0pXL6c1sLCvk8aofRXdfYT\nKWWdlHK3lHKelHJ6d8kOjZFH29GjtOTmqTpe0dlCdWbYTPQ6+++d95vs1aAzwsSrHG3JkFm/pchq\nooHWwiUqkpiVryJbWylYtpx2rd1Br/RXSPB1IcRrJ95sbZyG82JKV0SC1RyvKKwvpNRU6tzxCnMb\n7FwHoy8ET/U2lYJO0cAizh0XSoCncwXpXRMTiX75JdorKylYfgvmY8ccbZLT0d9tqE9Qekt8CnwL\n+ABa/8IRjCktDX1gIK6jRzvalEGjCknynC+hsXJYiAZ+s+8oNY1tLHJgYPt0uE+eTNSzK2g5dIjC\n2+/A0nSSFN6Ipr/bUO91u61GkRAfTKtVjWGAtFgwbdqEZ2oqQmfLNu62JbM0kxCPEOJ84hxtyqnZ\nvhq8wiDhbEdbMmTWZxUS7uvGr20gGmgtvObOJfLf/6IpO5uie+5BtrX1fdIIYbD/6UlAjDUN0VAP\nLQcOYK6qUnW8wiItbC7bzOzw2U4RaO2VhnJlZTH5atD3q37WaSmta+InG4sGWgufCy4g7JFHMP34\nEyUP/glpOamj84ikvxXc9fTsn12G0jFPYwRiSksD1B2vyKnJobal1rlTZneuA2keFllQ72Z1iAZO\nd84tqBPxv3oR5tpaKv7zH/S+voT+5c/Oe1FhJ/qrDaWJBmp0YUpPxzUpEWNoiKNNGTQZJU4er5BS\nyYKKmgHByY62ZkhYLJINW4tIHRVITKCHo83pN4G33oK5tpbq119H7+9P8J2/c7RJDqW/2VCXd9RZ\ndD72E0JoClwjEEtzM41ZW/Gco94tKICMsgzifeMJ8bC9w7OYLfTsGtwPSrZBxT6Ycq1tjLIjGYer\nKKhuZNEMddXxCiEI+X//g+/ll1P53HNUr1rtaJMcSn9jFn+VUtZ1PpBS1gJ/tY1JGs5MY9ZWZGsr\nnnPVuwXVZm5j29FtdpEkb281886jmax5bDMHs8v77zSyV4PBDSZcYVsD7cCGrCK83ewvGmgNhBCE\nP/4YXmefzdEnnqDu408cbZLD6K+z6G2cuiNuGoPClJaGMBrxSHHyjnKnYWflTpram+wSr9jxXSF1\n5U20t5r54qXdbPhHFvl7qk7vNNqaYfe7MPYScHOsJMZQqWtq47NdpSycHIGb0YkLH0+DMBiIfOZp\nPGbOpOTBB0ds86T+OossIcQzQogEIcQoIcR/gK22NEzDOTGlp+M+bRo6D/XsPZ9IZmkmOqEjJcy2\nDq+poZVtX+QTNymI6x+bzfwbxtJsauOTZ3fwwdPbKMmt6f3E/Z9Ac92wEQ1sabdw9Qx1BLZPhc7V\nlagXnsctOZmiu++hcevI+/rrr7O4C2gF1gHrgSZgZEd7RiBt5eW0HDig6pRZUIrxxgWMw9fVtlft\nWZ8eoa3FTOplCej0OsbOCee6R2dz5uJk6iqa+ODpbD5asZ2jR06oFt7+DvhGQ/yZNrXPHqzPUkQD\nJ0aqe4UEoPfyIvqVlzGGhVF4+x00HzjgaJPsSn+L8kxSygeklCkdtz9JKU22Nk7DuWjcpH6Jj8a2\nRnZV7LJ5FlRteSO7fyxm7K8iCIg43jZUb9Ax4cwoljyeypwrEqnIr+fdJ7P47MWdVBU3QF2x0hFv\n8mJQccEjwL7SY+wsqmORk4gGWgNDYCAxr61E5+lJwbLltBYUONoku9HfbKivhRB+3R77CyG+tJ1Z\nGs6IKT0dvZ8fbuPGOtqUQZN1NIt22W5zZ5Hx4UF0Rh0zL47v9XmDi56p58aw5IlUZl4ST/GBGtY+\nsZmvXthEbXvosMiCWp9ViIte51SigdbAGBFBzMpXob2dgqXLaCsvd7RJdqG/ly5BHRlQAEgpawD1\nJtlrDBgpJQ3p6XjOmaN6iQ8XnQtTQ6ba7DXKDtVxcFsFU8+NwdPX9bRjXdwNzLgoniV/m8O082I4\nXODJO5XP8/2nzdRXN9vMRlvT0m7mw+xizh0Xir+TiQZaA9eEBKJfeZn26moKly3HXFfX90kqp7//\n9RYhRJe8hxAijp4V3b0ihLhACHFACJEnhHigl+f/I4TY3nHLEULUdnvuRiFEbsftxn7aqWEjWnJy\nMVdUqjplFo63UHUz2KYHh5SS9Pfy8PBxYco5/Q/qunkaSZ1WwfVBtzNhQhP7M8tY9fAmfl6XQ+Ox\nVpvYaku+2VuuiAaqPLB9OtwnTiT6+edoPXJEER5sbHS0STalv87iz8AvQoi3hRBvAz8CD57uBCGE\nHngeuBAYBywWQozrPkZKea+UcoqUcgrwLPB+x7kBKHUcs4CZwF+FEP79f1sa1mY4SHxUN1dzoOaA\nTbegDm+vpPRgHTMvicfFbYDZ5dtX4enezhm3zuf6x1IZPSuMXT8W8/Zf0tn0wUGaTeoRtVuXVUiE\nrxu/SgxytCk2xTM1lYinn6Jpxw6K7r4H2ao+x95f+hvg/gJIAQ6gZET9ASUj6nTMBPKklIeklK3A\nWuDS04xfDKzp+Pl84GspZXXHltfXwAX9sVXDNpjS03EZNQpjuPoKqzrZXLoZsJ3Eh9lsIf2DPPzD\nPBg7Z4CfU6sJ9nwI4y8DF0+8A9yYv2Qs1/51FvGTg9n2VT5v/zmdLZ8eprW53Sb2W4uS2iZ+zlWH\naKA18DnvPMIefQTTzz9T8sCDw1Z4sL9CgsuBu1H6bm8HZgObgPmnOS0S6N6jsAhlpdDb/LFAPPDd\nac49KUomhLgVuBUgJkYTwbUVlpYWGrdswW/RIkebMiQySjPwMnoxLnBc34MHwd6fS6grb+Ki305C\npx9gXGfvRmhtOEk00C/Ug/OWjWf6BbFkfnSIzR8fZuf3RUw7P5aJZ0ZicHG+Qrd3txYhJVypEtFA\na+B/1VWK8ODTz6D38yX0oYeGTQZYJ/39i74bmAHkSynnAVOBvnoP9vZJnSrOcQ3wrpTSPJBzpZQv\nd6bzBgc7r0a+2mnatg3Z0oLnnFRHmzIkMkszSQlLwaCzvvhAa1M7Wz49TGSyH7ETB9HRLns1BCRA\nTO9V5YGRXiy4YxJX3p9CcLQX6e/lseqhTez+sQhzu/NcySqigYXMSVCXaKA1CLrlFgKWLaXmnTVU\nPvuco82xOv11Fs1SymYAIYSrlHI/0FeLtCKg+6VFFFByirHXcHwLaqDnatgYU1oaGI14zpzpaFMG\nTXFDMUUNRTaT+Nj2VT5N9W3MuSJx4FeU1Ych/xclXbaPc0PjfVh491Quu28qPkHu/Lgmh3ceyWD/\nplIslgGKFdqAjENVFFY3OW03PFsT8sc/4nvFb6h84QWq33rb0eZYlf46i6KOOosPga+FEBvp+8t7\nC5AkhIgXQrigOISPThwkhBgN+KNsa3XyJXBeRz2HP3BexzENB9CQlo7HlCnoPD37HuykZJZmAtjE\nWTTUtLDjm0KSZoQSEusz8Am2vwMIpRCvn0Qm+3P5H6dx8Z2TcfUw8u2b+1j7WCZ5W8uRDnQa67MK\n8XYzcMGEMIfZ4EiEEIQ/+ije557D0b//nbqPTvrKUy397WdxecePjwghvgd8gS/6OKddCHEnype8\nHnhNSrlHCPEYkCWl7PwUFwNrZTdlNSlltRDicRSHA/CYlLK63+9Kw2q0V1XRsm8fwffc7WhThkRG\nSQbB7sGM8h1l9bkzPz6ERUpmXzqIuS0W2LEGEuaB78CK14QQxE4IJGZ8AIeyK8j86BBfvrKboGgv\nZi0cReyEQLvum9c1tfH57jIWpUSrVjTQGgiDgYinnqLwttspefBP6Ly98Z43z9FmDZkBb95KKfst\nuSil/Az47IRjD5/w+JFTnPsa8NpA7dOwLqb0DokPFetBSSnJLMskNSLV6l+eVcUN7N9UypSzo/EJ\nch/4BEd+grpCOOeRQdsghCBhWgjxU4LJ3VzG5k8O8+nzOwkb5cusS0cRNdo+WecfdYgGjtQtqO7o\nXF2Jeu45Cm66ieJ77iVm5auqVmqGwffg1hghmNLT0fn64jbONhlE9iC3Npfq5mqb9K9Ifz8PV3cD\n0y+MG9wE2asVGfIxFw/ZFp1OMHp2ONc+Opszrx1NfXUzG/+Tzcb/zabssO0rjNdvKWRsuA8TIgex\nFTcM0Xt5Ev3ySxgjIhThwX37HG3SkNCchcYpkVJiSkvDMzUVoVfvtoKt4hWF+6op2FPN9AvjcPM0\nDnyC5jrY9xFMuBKM1qso1+t1TDgjkusfn83cKxOpKm7gvX9u5dMXdlJZ1GC11+nO3pJj7CquY1FK\n1LBLGR0KhoAARXjQ25uC5bfQeuSIo00aNJqz0DglrQcP0l5ePixSZmN9Ygn3sl5BobRI0t/PwzvQ\njUlnDbJd6O73ob0Zptqmb4XBqGfKOTFc/3gqsxaOoiS3lnVPbObLV3dTU2Zd0ehO0cDLpgwv0UBr\nYAwPV4QHLRYKli2n7ehRR5s0KDRnoXFKjkt8qDde0WZpI+toltW3oHI2l1FZ2MDsy0ahNw7y32j7\naggeCxHTrGrbibi4GUhZEMeSJ1KZfkEsR3ZVsebRTL59ax/HqvoSYuiblnYzH24v5tzxw1M00Bq4\njhpF9MsvY66poXD5csy1tX2f5GRozkLjlDSkp+MSG4tLlHqvFvdU7sHUZrKqxEd7q5mMjYcIjvEm\naXro4CapOABFW5RVhZ22bdw8jcy+LIElj6cyaV40uZuPsvrhDH5acwBTXcug5/1671FqG9u4Wgts\nnxb3iROIeuF5Wo/kU3jb7aoTHtSchUavWFpbady8RdVZUKBIfAgEM8OsV1C48/siGmpamHtFImKw\n2kfbV4PQw6SrrWZXf/HwceFXi5K4/vHZjJkTzp6fS1j1l02kv5dHc8PAxQrXbVFEA+cOc9FAa+A5\nezYRzzxN065dFN31e1UJD2rOQqNXmrZlI5ua8PyVup1FZmkmYwLG4Ofm1/fgftDU0MrWz48QNzGQ\nyMGmpJrbYcdaSD4fvBzXFsbL3415143h2kdnMWpaMNnfFPDWX9LZ/PEhWpv6J1ZYXNvEL3mVXJkS\nPSJEA62Bz7nnEv74Y5jS0ii+/36k2dz3SU6A9UVyNIYFpvR00OvxULHER1N7EzsqdnD92Ov7HtxP\nuvpqX544+EkOfgsNR2GKbQLbA8U32INzbx7PtPNj2fzxYbZ8eoSdP3SIFZ4VhfE0YoXvZimigVdN\nH2SQf4Tid8UVmGvrKP/3vynz8SXskb86fRaZ5iw0esWUlob7lCnovbwcbcqgyT6aTZulzWrxilP1\n1R64YavAI0hZWTgRgRFeXHjbRMrzj5H50SE2vX+QHd8UkrIgjnFzI04K5HeKBs5NDCQ6YGSJBlqD\nwGVLMdfWUPXKq+j9/Qi55x5Hm3RatG0ojZNor6mhee9e1afMZpRmYNAZrNZCNePDQ6ftq90vTFVw\n4HMlVqEfRG2GHQiJ9eGSu6Zw+R+m4RfqwU9rc1j91wz2ppVgMR9XuN10qIqimpErGmgNgu+7D7+r\nrqTqvy9R9cYbjjbntGgrC42TaNy0CaTEaxgEtycHT8bDOPSrXqWvdjkzLorrs6/2adm1ASxtNqut\nsCYRSX5cdt9UCvdVk7nxEN+/vZ+tnx/BN0T5PPeXHuOaRlfkD+V89FNfHQs0TknQb2ieNx7zZ5W4\n5n6FIXTgcSz/UA9+fXWyDYw7juYsNE6iIT0dnbc3bhMmONqUQVPXUsf+6v3cMeWOIc/Vo6/2uUNs\nsrV9FYRPgdDxQ7bLHgghiBkXSPTYAA7vqGTXD0W0NrVjtkiO1bcS6uVCe4s6ArTOjC42gTazwHS4\nEBcM6H0GJpnS1mr734HmLDR6oEh8pOM5ezbCoN4/j81lm5FIUsOHvpV2eIfSV/us60YPvK92d0p3\nQtkuuPDfQ7bJ3gghGDUlmFFTlCZjb286wqqN5Xxy1wwmRPo61rhhgrlhHAU330zLxweIfvUVp+sf\no8UsNHrQevgw7aWleM6d42hThkRmaSYeBg/GBw3tCt5strDpg4OD66t9ItvfAb0LTLxyaPM4Aeuy\nChkX7qM5CivSJTwYHTJk+oAAABsiSURBVE3RHb+lee9eR5vUA81ZaPTAlJYOqFuSHJR4RUpYCkbd\n0ILIe38uofZoI6m/SRx4X+3utLfCrvUwegF4BAzJJkezp6SO3cXHWJSipctaG4O/PzErX0Xn60PB\n8ltoOXzY0SZ1oTkLjR6Y0tIwxsTgEq3eDJcyUxn5x/KHrAfV2Vc7IsmPuMH01e5OzhfQWAVTrVfz\n4Sg2ZBUpooFT1SsD48wYw8KIWbkSgIJly2grK3OwRQqas9DoQra20rh587BImQWGXF+R/XXB4Ptq\nn8j21eAdDgnzhzaPg2luM/NBdjHnjQ/Fz0MTDbQVrvHxRL/yMpa6YxQsX057TY2jTdKchcZxmnbs\nwNLYqPotqMzSTALcAkjyTxr0HA01LWz/uoCklBBC44bYzKf+KOR+DZOvAZ16+4KAIhpY19TG1TPU\nu/JUC+7jxxP1wgu0FRQqwoMm68rKDxTNWWh00ZCeDjodnrOs31HOXkgpySzNZFbYLHRi8H/emzv7\nal+WMHSjdq4FaYYp6t+CWp9VSKSfO3MTNNFAe+A5ayaR/3mG5j17KLrrLiwOFB7UnIVGF6a0dNwn\nTRpwjrczcbjuMBVNFUPagqoqbmDfplImnhU1uL7a3Wmug6zXIHoWBA1BT8oJ2FFYq4gGTo9Cp4kG\n2g3vs88m/IknMKVvouR//p/DhAc1Z6EBgLm2lubdu/Gco+6U2U2lm4ChxSs6+2qnDLavdiftLbD2\nOqgrhvkPDW0uB1NQ1ciyN7cQ6efODamxjjZnxOF3+WWE3H8/9V9+SdkjjyKltLsN6q260rAqpoxM\nsFiGhSR5pFckUd6DS+vs7Ks954rEwfXV7sRigQ9/C0d+ht+8AvG/HvxcDqaqoYUbX99Mu0Xy5tKZ\nBHoNQe5EY9AE3nwT5tpaql56Cb2/PyH33WvX19echQagpMzqPD1xnzjR0aYMmnZLO1llWZwXd96g\nzu/qqx3gxsSzhpgW+s3DsPtdOOdRmLRoaHM5kKZWM8vezKKktol3bplFQrB6VYiHA8H33K04jJdf\nRu/nR+DSm+322pqz0OiQ+EjDY/ZshNE5lVD7w76qfdS31TM7fPagzu/sq33u0nEYjEPIWsp4EdKf\nhZm3wty7Bz+Pg2k3W7hrzTZ2FtXy4vXTmR6r7mLC4YAQgrCHH8JcV0f5v/6F3tcXvyt+Y5fXtmnM\nQghxgRDigBAiTwjxwCnGLBJC7BVC7BFCvNPt+L86ju0TQqwQzt4ZRMW05efTVlKifomPskwAZoYP\nXFOnR1/tlEH21QbY8yF88SCMuRgueNJu/bWtjZSShzbu4Zt95Ty6cDznjw9ztEkaHQi9noh//RPP\nOXMofegh6r/5xi6vazNnIYTQA88DFwLjgMVCiHEnjEkCHgTmSinHA/d0HJ8DzAUmAROAGcCZtrJ1\npNOQrkh8eKk8uJ1RkkGyfzIBbgO/Au7sqz1nKH2189Ph/VuVzKcrXlV1TcVz3+WxZnMBvz0rgSWp\ncY42R+MEdC4uRD27AreJEyi+7w9KzNHWr2nDuWcCeVLKQ1LKVmAtcOkJY24BnpdS1gBIKcs7jkvA\nDXABXAEjcNSGto5oTGnpGCMjMcaqN8ulub2Z7PLsQWVBNTe0sfWLfGInBhI12L7a5fthzTXgHwuL\n1/D/27vz8Cjra4Hj35OEhCRsAgmGxQISLKgsEnbca0VqsS5VUetCcev1tr193Lpc18fntrXa3tta\n61qxKm5YQAV3FE3IJGFfAgpRIBBCCAHMJDHJzLl/zBsMITDJJJPJO3M+zzMPMy/vzJyXTObwvr/f\n+R26tHHKbQS9VrCDR97/nEvGDuCO80+KdDjmKOJSUxn0j3/Q5YRBlD70UNin1IZzzGIAsKPR42Kg\n6W/ycAARyQbigftU9R1VXS4iS4ESQIC/qWphGGONWVpXR5XHQ48LLuj0PYCPZXXZamr9tSGNV+Qv\n/pK6mnqmhNpX++AueOFSSEiGa+a7eqHAjzfv4e431nF6Zl9+f+koV38mYkFg4cFnQBWJD++ZbDiT\nRXOfsqaTgxOATOAsYCDwqYicAvQFRjjbAN4XkTNUddlhbyByE3ATwAkntLEpTYyqXrcOf2VlVCzx\nkSAJZPXLatXzDpQ5fbWnhthXu+YAvPjjwJ83LIZe7v0cris+wM9eXMlJ/brz+DXjSEywMiw36NKv\nDWNsrRDOT0Mx0HgBmYHArmb2Waiqdar6JbCZQPK4GMhV1UpVrQSWAEf8l1FVn1TVLFXNSktLC8tB\nRDtvdg6IkDrJvUt8QCBZnJp2aqtbqOYuKCIuXpjwwxD6atfXwivXQNkmuOJ5yBjV+tfoJLaXV3HD\nc3kcl5LIczeMp1uSTZQ0hwtnssgHMkVkiIgkAlcCi5rsswA4G0BE+hK4LFUEbAfOFJEEEelCYHDb\nLkOFgTc7m66nnkp8r16RDiVkB2sPsqF8Q6vHK3Z/eYAtK/Yw5rwTWt9X2++HhT+DL5fBRY+5ejXZ\nfd7aw4ru0nt0jXRIphMKW7JQ1XrgNuBdAl/0r6rqBhF5QERmOru9C5SLyEZgKXCHqpYDrwNbgXXA\nGmCNqr4Zrlhjle/gQarXrnX9lNn83fn41d+q/hUNfbWTeyQyNpS+2h/eB+teg3PvDawm61KBort8\ndu2v5ulrsxiWbkV3pnlhPddU1cXA4ibb7ml0X4FfObfG+/iAm8MZmwGvJ7DEh9unzHpKPCQnJDM6\nbXSLn/Plmr2UbDnAmVeF0Ffb8wRk/y+MvxGmdeySC+0pUHS3itU79vP41ePIGuzegXkTfjaCFcO8\n2dnEpaSQPLrlX7KdkafEw2n9TqNLfMuqzxv31R45tZV9tTcuhCV3BYruLviDq4vu7l20gQ8KS7l/\n5slMP8WK7syxWbKIYd6c5aRMmIAkurfj2Z6qPRQdKGLS8S2fMlv4mdNX++ITW9dXe1sOzL8RBk1w\nfdHd3z/eyoue7dxy5olca0V3pgUsWcSo2h07qNu+PSqmzELLlySvrakn7y2nr/aoVjTw2bMJ5s0K\nTI2d9bKri+5eX1HMw+9u5uKxA7jTiu5MC1myiFHe7MASH24f3M4tyaVXUi9O6t2yL71V74XQV/tg\nCbx4GSQkub7o7pPPy7h7/lqmDevLHy4dZU2MTIvZZOoY5c3OJiEjg8QhIdQXdBINLVTHHz++RS1U\nQ+qrXXMwkCiqKwJFd8e5d0mU9TsPcOsLK8js153HrznNiu5Mq9inJQZpfT3e3FxSp0x29XIO2w5u\no7SqtMVLfOS9VYTf34q+2ocV3f0LMtw7EWDHviqu/2f+oaK77l3duxS9iQxLFjGoZv16/F9/Tbco\nGa9oSbIo31nJppxW9NX2+2Hhf8CXn8DMv7m/6O7ZPOp8fubOHk8/K7ozIbDLUDGoMjsbREiZPDnS\nobSJZ7eHjNQMBnUfFHTfnDe2kpicQNaMwS178Q/vh3Wvwrn3wJhZbQs0gqprfcyZm0/x/mpenDOR\nYendIx2ScSk7s4hB3pzldB05koTjQlyOuxPw+X14SjxMzJgY9FLajk372L6hnHHTB7esr7bnScj+\nC2T9FKb9Kvj+nZTPr/z85VWs2rGf/7tyDOOt6M60gSWLGOOrrKR69WrXT5ndVLGJg7UHg06ZVX9g\nWY/uvbty6tkt6Ku9cREsuTNQdDfjYZcX3a3n/Y2l3PfDk5l+SiuLD41pwpJFjKnKywOfj9QoWOID\ngo9XfJ5fyt4dlUy8aGjwvtrblsP8OTBwfFQU3b2Qu52bzxzKdVMGRzocEwUsWcQY72fZSHIyyaeN\njXQobeIp8TCs1zD6Jh+9sK6+zkfuwq2kndCd4eODrPlftjnQ6a7XILjqFVcX3c13iu5+NKY/d53/\n3UiHY6KEJYsY483JIWV8FnEuXuKj1lfLytKVQS9Brf2omMp9LeirfbAk0OkuPtH1RXfLPi/jrvlr\nmTqsD3+8bLQV3Zl2Y8kihtQW76T2q69cP2V2Tdkaanw1x1ySvMV9tWsOBjrdVVfA1a/BcYPbP+AO\n0lB0Nyy9m3W6M+3Ops7GEG9ONoDrxytyS3KJkziyjj96C9WCxV9RV1PP5IuPUYBXXwuv/gTKCuGq\nV6H/mDBE2zF27Kvihufy6ZWSyNzZE+hhRXemnVmyiCHenOUkpKeTOGxYpENpE0+Jh1P6nkL3xOZr\nBg6UVbHuk2JGTMmgT/+jNPNRhUW3QdHH8KPHYdi54Qs4zCqcTnff1Pl4ac5EK7ozYWHnqTFCfT68\ny5eTOnWqq5f4qKytZP3e9ce8BHWor/bMoUd/oQ/vh7WvwDm/gzFXhSHSjlFT52PO8wUUV1Tz9HXj\nyexnRXcmPCxZxIiajRvxHzjg+ktQK0pX4FPfUafMtqivdt5T8NmfIWs2nH57GKMNL59f+fm8Vazc\nXsFfrhjDhCHuHZg3nZ8lixjhzW4Yr3D3Eh+5JbkkxScxOv3IRf1a1Fe78E1YfAecNANm/MnVRXf3\nLdrAextLuefCkcw41YruTHhZsogR3uwckkaMIKFPn0iH0ia5JbmMTR9LUvyRZw0NfbUnXDik+b7a\n23OdorssuPQZVxfdPf7JVv6Vu42bzxjKDVPdu8y8cQ9LFjHA7/VStXo13Vze6Ghv9V627N/S7CWo\noH21yz6Hl66AHgNg1iuQmNIBEYfHGyuL+eM7m5k5uj93TbeiO9MxLFnEAG9+PtTVuX68Iq8kD2h+\niY9j9tX+erdTdNclUHSX6t6zq0+/KOPO19cyeWgfHv6xdbozHcemzsYAb3YOkpRE8rhxkQ6lTTy7\nPXRP7M53ex/+v+lj9tVu6HRXVQ43vA293XvJZsOuA9z6wkqGpXfjiWvHkZTg3stoxn3szCIGeLOz\nScnKIi7pKLODXEBVyd2Vy4TjJxDfZKzhUF/tS5r01a6vhVevhdKNcPnz0N+962E1dLrr0TWB526w\nojvT8SxZRLm6khJqi4pcvyR58dfF7PLuOmI9KO/+b1j9wXaGZaXTb0ijvtqqsOg/oWgpzPwrZH6v\ngyNuP/urarneKbp7bvYEju9pRXem44U1WYjIdBHZLCJbROTuo+xzuYhsFJENIvJSo+0niMh7IlLo\n/P3gcMYarbw5OQCuTxa5u3MBjkgWnjeL8PuUSRc1Wdbjwwdg7ctw9u9g7NUdFWa7q6nzMWduATv2\nVfPUtVkMt6I7EyFhG7MQkXjgMeA8oBjIF5FFqrqx0T6ZwK+BqapaISLpjV7ieeAhVX1fRLoB/nDF\nGs282TnEp/UlaXhmpENpE0+Jh/SUdIb0+HbMoaGv9qhzBtEzrdGS4nlPwWePwrjr4Qx3F9398uXV\nrNhewd9mncbEoe4dmDfuF84ziwnAFlUtUtVa4GXgoib73Ag8pqoVAKq6B0BERgIJqvq+s71SVavC\nGGtUUr8f7/LldJsyxdVLfPjVT15JHpMyJh12HMv/vZUuXRPIumDwtzsXvhUouht+Acx4xNVFdw+8\nuYF3Nuzmv38wkh+MsqI7E1nhTBYDgB2NHhc72xobDgwXkWwRyRWR6Y227xeRN0RklYg87JypmFao\nKSzEV1Hh+imzX1R8QcU3FYddgiretI9t68sZd8F36NrNGezd7oH5P4UB4+CyZyHevZP9nlhWxNzl\n27jx9CHMnubeGVwmeoQzWTT3Xzpt8jgByATOAmYBT4tIL2f76cDtwHhgKHD9EW8gcpOIFIhIQVlZ\nWftFHiW82YHxipTJ7l/iAzi0eKD6lWynr/aoswcGdtr7Bcxziu6ucnfR3YJVO/n9kk38cHR/fn3B\niEiHYwwQ3mRRDAxq9HggsKuZfRaqap2qfglsJpA8ioFVziWsemABcFrTN1DVJ1U1S1Wz0tLSwnIQ\nbubNziZp+HC6pKcH37kTyy3JZXCPwfRLDbRGPaKv9tel8MIlEJfgFN0dvdVqZ5e9ZS93vL6GyUP7\n8CcrujOdSDiTRT6QKSJDRCQRuBJY1GSfBcDZACLSl8DlpyLnuceJSEMGOAfYiGkxf1UV1StXun4W\nVJ2vjhWlKw5VbR/RV/ubrwNFd97yQAMjFxfdbdx1kJv/tYKhfbvxj59Y0Z3pXMKWLJwzgtuAd4FC\n4FVV3SAiD4jITGe3d4FyEdkILAXuUNVyVfURuAT1oYisI3BJ66lwxRqNqgoK0ChY4mPd3nVU11cf\nShZrlzp9tS85EdF6p+huA1w+FwYccfLpGsUVVVz/zzy6d03gudnj6ZlsRXemcwnrCKCqLgYWN9l2\nT6P7CvzKuTV97vvAqHDGF8282TlIYiIpWS5f4qPEc6iFak1lHSuWbOM7pzh9tRfcCls/goseg8zz\nIh1qyAJFd/lU1/mYf+sUMnomB3+SMR3MKrijlDcnm5SsccQlu/uLJ7cklxG9R9Azqee3fbUvORE+\nehDWzIOzfwtjr4l0mCGrqfNx4/MFbC+vsqI706lZsohCdaV7+OaLLa6/BFVVV8XasrVMzJjIgbLq\nb/tq73wFPn0ETrsOzrgj0mGGzOdX/uuV1eR/VcGjV4xmkhXdmU7MkkUUipYlPlaUrqBe65mUMYnc\nhVsDfbVHFMHi22H4dPjBo64uunvwrY0sWb+b/75wJBeO6h/pkIw5JksWUcibk0N8794knXRSpENp\nE0+Jh8S4RAZWDWNLwR7GTIgn9Z3ZgdVjXV509+SyIp7L+Yo504bwUyu6My5gySLKqN+PNyeH1ClT\nkDh3/3g9uz2MSRtD/oLtJKfGMXbHTdCjf2CKbGJqpMML2cLVO/mfJZu4cFQGv5lhRXfGHdz9bWKO\n8M3mzfjKy10/XlFRU8GmfZsY/805gb7a3V4mMb42Korubn9tDZOG9uaRy0db0Z1xDfeex5tmfTte\n4e5k4dntQTSOxLz+JCWVMaLLW3D1Qug9NNKhhayw5CC3OEV3T/wky4rujKtYsogy3uxskjKH0aVf\nv7C/l8/vo7q++ohbVX3V4dvqmtnW5O+bbqvx1TB27zlUlytnHfcM8Zc/G1gg0KV27q/m+n/m0c2K\n7oxLWbKIIv6aGqoKVnDcrCsPbav31x/zC7rxl/ih+818eR+REOqqqPXXtiq+LnFdSE5IPuLWs2tP\nMhIyDj1OSUihqz+F+IKBpHXZwJDLroHh32/vf64Oc6CqjuuezaOq1sfrt1jRnXEnCRRRu19WVpYW\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1162f1810>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(grid.best_score_)\n",
    "print(grid.best_params_)\n",
    "\n",
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_gamms = len(gammas)\n",
    "\n",
    "test_scores =  np.array(test_means).reshape(n_Cs,number_gamms)\n",
    "#train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_gamms)\n",
    "#train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(gammas):\n",
    "    pyplot.plot(x_axis, test_scores[:,i], label= gammas[i])\n",
    "    #pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = gammas[i] )\n",
    "    #pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuary' )\n",
    "pyplot.savefig('SVMGridSearchCV_C.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# C越大，最佳的gamma越小"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
